using System.Collections.Generic;
using UnityEngine;

/// <summary>
/// 火焰子弹转换器（策略模式实现）
/// 负责将普通子弹转换为火焰子弹
/// </summary>
public class FireBulletConverter : IBulletConverter
{
    public bool CanConvert(Bullet bullet)
    {
        if (bullet == null)
        {
            return false;
        }

        // 只转换非火焰子弹
        return bullet.BulletType != BulletType.Fire;
    }

    public Bullet Convert(Bullet bullet, IBulletConverterData converterData)
    {
        if (bullet == null || converterData == null)
        {
            Logger.LogWarning("FireBulletConverter", "子弹或转换数据为空");
            return bullet;
        }

        if (!CanConvert(bullet))
        {
            Logger.Log("FireBulletConverter", $"子弹 {bullet.name} 已经是火焰子弹，跳过转换");
            return bullet;
        }

        Logger.Log("FireBulletConverter", $"开始转换子弹 {bullet.name} 为火焰子弹");

        // 使用外观模式统一管理转换过程
        var facade = new BulletFacade(bullet);
        
        // 1. 应用效果增强（先应用增强，因为替换预制体可能会创建新实例）
        facade.ApplyEnhancement(converterData);

        // 2. 替换预制体（外观）- 如果提供了新预制体
        if (converterData.TargetPrefab != null)
        {
            facade.ReplacePrefab(converterData.TargetPrefab);
            // ReplacePrefab 会更新 facade 内部的 bullet 引用
            // 我们需要获取更新后的 bullet
            bullet = facade.GetBullet();
        }

        Logger.Log("FireBulletConverter", $"子弹转换完成: {bullet.name}");
        return bullet;
    }
}

